60806040523480156200001157600080fd5b50336040518060600160405280603f8152602001620028bf603f91396200003e81620000cc60201b60201c565b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000b45760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000ab9190620001ec565b60405180910390fd5b620000c581620000e160201b60201c565b506200056a565b8060029081620000dd919062000483565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d482620001a7565b9050919050565b620001e681620001c7565b82525050565b6000602082019050620002036000830184620001db565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200028b57607f821691505b602082108103620002a157620002a062000243565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200030b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002cc565b620003178683620002cc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003646200035e62000358846200032f565b62000339565b6200032f565b9050919050565b6000819050919050565b620003808362000343565b620003986200038f826200036b565b848454620002d9565b825550505050565b600090565b620003af620003a0565b620003bc81848462000375565b505050565b5b81811015620003e457620003d8600082620003a5565b600181019050620003c2565b5050565b601f8211156200043357620003fd81620002a7565b6200040884620002bc565b8101602085101562000418578190505b620004306200042785620002bc565b830182620003c1565b50505b505050565b600082821c905092915050565b6000620004586000198460080262000438565b1980831691505092915050565b600062000473838362000445565b9150826002028217905092915050565b6200048e8262000209565b67ffffffffffffffff811115620004aa57620004a962000214565b5b620004b6825462000272565b620004c3828285620003e8565b600060209050601f831160018114620004fb5760008415620004e6578287015190505b620004f2858262000465565b86555062000562565b601f1984166200050b86620002a7565b60005b8281101562000535578489015182556001820191506020850194506020810190506200050e565b8683101562000555578489015162000551601f89168262000445565b8355505b6001600288020188555050505b505050505050565b612345806200057a6000396000f3fe608060405234801561001057600080fd5b50600436106100b35760003560e01c8063731133e911610071578063731133e91461019e5780638da5cb5b146101ba578063a22cb465146101d8578063e985e9c5146101f4578063f242432a14610224578063f2fde38b14610240576100b3565b8062fdd58e146100b857806301ffc9a7146100e85780630e89341c146101185780632eb2c2d6146101485780634e1273f414610164578063715018a614610194575b600080fd5b6100d260048036038101906100cd91906116a6565b61025c565b6040516100df91906116f5565b60405180910390f35b61010260048036038101906100fd9190611768565b6102b6565b60405161010f91906117b0565b60405180910390f35b610132600480360381019061012d91906117cb565b610398565b60405161013f9190611888565b60405180910390f35b610162600480360381019061015d9190611aa7565b61042c565b005b61017e60048036038101906101799190611c39565b6104d4565b60405161018b9190611d6f565b60405180910390f35b61019c6105e3565b005b6101b860048036038101906101b39190611d91565b6105f7565b005b6101c2610611565b6040516101cf9190611e23565b60405180910390f35b6101f260048036038101906101ed9190611e6a565b61063b565b005b61020e60048036038101906102099190611eaa565b610651565b60405161021b91906117b0565b60405180910390f35b61023e60048036038101906102399190611eea565b6106e5565b005b61025a60048036038101906102559190611f81565b61078d565b005b600080600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061038157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610391575061039082610813565b5b9050919050565b6060600280546103a790611fdd565b80601f01602080910402602001604051908101604052809291908181526020018280546103d390611fdd565b80156104205780601f106103f557610100808354040283529160200191610420565b820191906000526020600020905b81548152906001019060200180831161040357829003601f168201915b50505050509050919050565b600061043661087d565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561047b57506104798682610651565b155b156104bf5780866040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016104b692919061200e565b60405180910390fd5b6104cc8686868686610885565b505050505050565b6060815183511461052057815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610517929190612037565b60405180910390fd5b6000835167ffffffffffffffff81111561053d5761053c6118af565b5b60405190808252806020026020018201604052801561056b5781602001602082028036833780820191505090505b50905060005b84518110156105d8576105a8610590828761097d90919063ffffffff16565b6105a3838761099190919063ffffffff16565b61025c565b8282815181106105bb576105ba612060565b5b602002602001018181525050806105d1906120be565b9050610571565b508091505092915050565b6105eb6109a5565b6105f56000610a2c565b565b6105ff6109a5565b61060b84848484610af2565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61064d61064661087d565b8383610b8b565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006106ef61087d565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561073457506107328682610651565b155b156107785780866040517fe237d92200000000000000000000000000000000000000000000000000000000815260040161076f92919061200e565b60405180910390fd5b6107858686868686610cfb565b505050505050565b6107956109a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108075760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016107fe9190611e23565b60405180910390fd5b61081081610a2c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036108f75760006040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016108ee9190611e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036109695760006040517f01a835140000000000000000000000000000000000000000000000000000000081526004016109609190611e23565b60405180910390fd5b6109768585858585610e06565b5050505050565b600060208202602084010151905092915050565b600060208202602084010151905092915050565b6109ad61087d565b73ffffffffffffffffffffffffffffffffffffffff166109cb610611565b73ffffffffffffffffffffffffffffffffffffffff1614610a2a576109ee61087d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a219190611e23565b60405180910390fd5b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b645760006040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610b5b9190611e23565b60405180910390fd5b600080610b718585610eb8565b91509150610b83600087848487610e06565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfd5760006040517fced3e100000000000000000000000000000000000000000000000000000000008152600401610bf49190611e23565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610cee91906117b0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d6d5760006040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401610d649190611e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610ddf5760006040517f01a83514000000000000000000000000000000000000000000000000000000008152600401610dd69190611e23565b60405180910390fd5b600080610dec8585610eb8565b91509150610dfd8787848487610e06565b50505050505050565b610e1285858585610ee8565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610eb1576000610e5061087d565b90506001845103610ea0576000610e7160008661099190919063ffffffff16565b90506000610e8960008661099190919063ffffffff16565b9050610e99838989858589611296565b5050610eaf565b610eae81878787878761144a565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b8051825114610f3257815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610f29929190612037565b60405180910390fd5b6000610f3c61087d565b905060005b8351811015611151576000610f5f828661099190919063ffffffff16565b90506000610f76838661099190919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146110a357600080600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561104b57888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016110429493929190612106565b60405180910390fd5b81810360008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161461113e578060008084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611136919061214b565b925050819055505b50508061114a906120be565b9050610f41565b50600183510361121057600061117160008561099190919063ffffffff16565b9050600061118960008561099190919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611201929190612037565b60405180910390a4505061128f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161128692919061217f565b60405180910390a45b5050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1115611442578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016112f795949392919061220b565b6020604051808303816000875af192505050801561133357506040513d601f19601f82011682018060405250810190611330919061227a565b60015b6113b7573d8060008114611363576040519150601f19603f3d011682016040523d82523d6000602084013e611368565b606091505b5060008151036113af57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016113a69190611e23565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461144057846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016114379190611e23565b60405180910390fd5b505b505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b11156115f6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016114ab9594939291906122a7565b6020604051808303816000875af19250505080156114e757506040513d601f19601f820116820180604052508101906114e4919061227a565b60015b61156b573d8060008114611517576040519150601f19603f3d011682016040523d82523d6000602084013e61151c565b606091505b50600081510361156357846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161155a9190611e23565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115f457846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016115eb9190611e23565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061163d82611612565b9050919050565b61164d81611632565b811461165857600080fd5b50565b60008135905061166a81611644565b92915050565b6000819050919050565b61168381611670565b811461168e57600080fd5b50565b6000813590506116a08161167a565b92915050565b600080604083850312156116bd576116bc611608565b5b60006116cb8582860161165b565b92505060206116dc85828601611691565b9150509250929050565b6116ef81611670565b82525050565b600060208201905061170a60008301846116e6565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61174581611710565b811461175057600080fd5b50565b6000813590506117628161173c565b92915050565b60006020828403121561177e5761177d611608565b5b600061178c84828501611753565b91505092915050565b60008115159050919050565b6117aa81611795565b82525050565b60006020820190506117c560008301846117a1565b92915050565b6000602082840312156117e1576117e0611608565b5b60006117ef84828501611691565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611832578082015181840152602081019050611817565b60008484015250505050565b6000601f19601f8301169050919050565b600061185a826117f8565b6118648185611803565b9350611874818560208601611814565b61187d8161183e565b840191505092915050565b600060208201905081810360008301526118a2818461184f565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6118e78261183e565b810181811067ffffffffffffffff82111715611906576119056118af565b5b80604052505050565b60006119196115fe565b905061192582826118de565b919050565b600067ffffffffffffffff821115611945576119446118af565b5b602082029050602081019050919050565b600080fd5b600061196e6119698461192a565b61190f565b9050808382526020820190506020840283018581111561199157611990611956565b5b835b818110156119ba57806119a68882611691565b845260208401935050602081019050611993565b5050509392505050565b600082601f8301126119d9576119d86118aa565b5b81356119e984826020860161195b565b91505092915050565b600080fd5b600067ffffffffffffffff821115611a1257611a116118af565b5b611a1b8261183e565b9050602081019050919050565b82818337600083830152505050565b6000611a4a611a45846119f7565b61190f565b905082815260208101848484011115611a6657611a656119f2565b5b611a71848285611a28565b509392505050565b600082601f830112611a8e57611a8d6118aa565b5b8135611a9e848260208601611a37565b91505092915050565b600080600080600060a08688031215611ac357611ac2611608565b5b6000611ad18882890161165b565b9550506020611ae28882890161165b565b945050604086013567ffffffffffffffff811115611b0357611b0261160d565b5b611b0f888289016119c4565b935050606086013567ffffffffffffffff811115611b3057611b2f61160d565b5b611b3c888289016119c4565b925050608086013567ffffffffffffffff811115611b5d57611b5c61160d565b5b611b6988828901611a79565b9150509295509295909350565b600067ffffffffffffffff821115611b9157611b906118af565b5b602082029050602081019050919050565b6000611bb5611bb084611b76565b61190f565b90508083825260208201905060208402830185811115611bd857611bd7611956565b5b835b81811015611c015780611bed888261165b565b845260208401935050602081019050611bda565b5050509392505050565b600082601f830112611c2057611c1f6118aa565b5b8135611c30848260208601611ba2565b91505092915050565b60008060408385031215611c5057611c4f611608565b5b600083013567ffffffffffffffff811115611c6e57611c6d61160d565b5b611c7a85828601611c0b565b925050602083013567ffffffffffffffff811115611c9b57611c9a61160d565b5b611ca7858286016119c4565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611ce681611670565b82525050565b6000611cf88383611cdd565b60208301905092915050565b6000602082019050919050565b6000611d1c82611cb1565b611d268185611cbc565b9350611d3183611ccd565b8060005b83811015611d62578151611d498882611cec565b9750611d5483611d04565b925050600181019050611d35565b5085935050505092915050565b60006020820190508181036000830152611d898184611d11565b905092915050565b60008060008060808587031215611dab57611daa611608565b5b6000611db98782880161165b565b9450506020611dca87828801611691565b9350506040611ddb87828801611691565b925050606085013567ffffffffffffffff811115611dfc57611dfb61160d565b5b611e0887828801611a79565b91505092959194509250565b611e1d81611632565b82525050565b6000602082019050611e386000830184611e14565b92915050565b611e4781611795565b8114611e5257600080fd5b50565b600081359050611e6481611e3e565b92915050565b60008060408385031215611e8157611e80611608565b5b6000611e8f8582860161165b565b9250506020611ea085828601611e55565b9150509250929050565b60008060408385031215611ec157611ec0611608565b5b6000611ecf8582860161165b565b9250506020611ee08582860161165b565b9150509250929050565b600080600080600060a08688031215611f0657611f05611608565b5b6000611f148882890161165b565b9550506020611f258882890161165b565b9450506040611f3688828901611691565b9350506060611f4788828901611691565b925050608086013567ffffffffffffffff811115611f6857611f6761160d565b5b611f7488828901611a79565b9150509295509295909350565b600060208284031215611f9757611f96611608565b5b6000611fa58482850161165b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ff557607f821691505b60208210810361200857612007611fae565b5b50919050565b60006040820190506120236000830185611e14565b6120306020830184611e14565b9392505050565b600060408201905061204c60008301856116e6565b61205960208301846116e6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120c982611670565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120fb576120fa61208f565b5b600182019050919050565b600060808201905061211b6000830187611e14565b61212860208301866116e6565b61213560408301856116e6565b61214260608301846116e6565b95945050505050565b600061215682611670565b915061216183611670565b92508282019050808211156121795761217861208f565b5b92915050565b600060408201905081810360008301526121998185611d11565b905081810360208301526121ad8184611d11565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006121dd826121b6565b6121e781856121c1565b93506121f7818560208601611814565b6122008161183e565b840191505092915050565b600060a0820190506122206000830188611e14565b61222d6020830187611e14565b61223a60408301866116e6565b61224760608301856116e6565b818103608083015261225981846121d2565b90509695505050505050565b6000815190506122748161173c565b92915050565b6000602082840312156122905761228f611608565b5b600061229e84828501612265565b91505092915050565b600060a0820190506122bc6000830188611e14565b6122c96020830187611e14565b81810360408301526122db8186611d11565b905081810360608301526122ef8185611d11565b9050818103608083015261230381846121d2565b9050969550505050505056fea2646970667358221220f21c5794cf7bc34b970647036d3ebf1be0c0e49c40b97e5d8b6dea1bd644d17e64736f6c63430008130033697066733a2f2f516d6131744332744e5059596f736f576b78463135414177525958354664584a793750586832474465625a3475592f7b69647d2e6a736f6e