60c06040523480156200001157600080fd5b5060405162004c3f38038062004c3f833981016040819052620000349162000504565b733cc6cdda760b79bafa08df41ecfa224f810dceb6600186868686868482826200005d620002ec565b60096200006b838262000636565b50600a6200007a828262000636565b5050506001600160a01b0390811660805284811660a0528316620000b157604051630a4d16ed60e41b815260040160405180910390fd5b6001620000bd62000319565b6001600160a01b038516600090815260209182526040808220805460ff1916941515949094179093558251600180825281850190945290929091828101908036833701905050905083816000815181106200011c576200011c62000702565b6001600160a01b0390921660209283029190910190910152806200013f62000319565b600101908051906020019062000157929190620003a1565b507fc90c61dd7a67259711a8a4c0b50bc6130257c5ba9f2539c5050264827f3819ea60036040516200018a919062000718565b60405180910390a15050506daaeb6d7670e522a718067333cd4e3b159250620002df9150505780156200022d57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200020e57600080fd5b505af115801562000223573d6000803e3d6000fd5b50505050620002df565b6001600160a01b038216156200027e5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620001f3565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620002c557600080fd5b505af1158015620002da573d6000803e3d6000fd5b505050505b5050505050505062000763565b303b156200030c5760405162dc149f60e41b815260040160405180910390fd5b62000317336200034f565b565b6000806200034960017fa1f93c45d55294e6c2e764d95774fe71c86ec26daf62930bcecf3675030e7d9b62000741565b92915050565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054828255906000526020600020908101928215620003f9579160200282015b82811115620003f957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003c2565b50620004079291506200040b565b5090565b5b808211156200040757600081556001016200040c565b80516001600160a01b03811681146200043a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200046757600080fd5b81516001600160401b03808211156200048457620004846200043f565b604051601f8301601f19908116603f01168101908282118183101715620004af57620004af6200043f565b81604052838152602092508683858801011115620004cc57600080fd5b600091505b83821015620004f05785820183015181830184015290820190620004d1565b600093810190920192909252949350505050565b600080600080600060a086880312156200051d57600080fd5b620005288662000422565b9450620005386020870162000422565b9350620005486040870162000422565b60608701519093506001600160401b03808211156200056657600080fd5b6200057489838a0162000455565b935060808801519150808211156200058b57600080fd5b506200059a8882890162000455565b9150509295509295909350565b600181811c90821680620005bc57607f821691505b602082108103620005dd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200063157600081815260208120601f850160051c810160208610156200060c5750805b601f850160051c820191505b818110156200062d5782815560010162000618565b5050505b505050565b81516001600160401b038111156200065257620006526200043f565b6200066a81620006638454620005a7565b84620005e3565b602080601f831160018114620006a25760008415620006895750858301515b600019600386901b1c1916600185901b1785556200062d565b600085815260208120601f198616915b82811015620006d357888601518255948401946001909101908401620006b2565b5085821015620006f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60208101600683106200073b57634e487b7160e01b600052602160045260246000fd5b91905290565b818103818111156200034957634e487b7160e01b600052601160045260246000fd5b60805160a0516144a86200079760003960008181611cbd0152612a33015260008181610b1e015261112801526144a86000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c806379ba50971161010f578063bd85b039116100a2578063f242432a11610071578063f242432a146110c4578063f2fde38b146110d7578063f5298aca146110ea578063f6eb127a146110fd576101ef565b8063bd85b0391461106b578063c6ab67a3146110a1578063e8a3d485146110a9578063e985e9c5146110b1576101ef565b806395d89b41116100de57806395d89b4114610fff5780639d7f4ebf14611007578063a22cb46514611045578063a483011414611058576101ef565b806379ba509714610f9c578063869f759414610fa45780638da5cb5b14610fce578063938e3d7b14610fec576101ef565b80632a55205a116101875780634e1273f4116101565780634e1273f414610f5957806355f804b314610f795780636c0360eb14610f8c578063715018a614610f94576101ef565b80632a55205a14610eba5780632eb2c2d614610ef957806337da577c14610f0c57806341f4343414610f1f576101ef565b806307c9ae23116101c357806307c9ae2314610e79578063099b6bfa14610e8c5780630e89341c14610e9f57806323452b9c14610eb2576101ef565b8062fdd58e14610df157806301ffc9a714610e2c57806304634d8d14610e4f57806306fdde0314610e64575b60003660607fffffffff000000000000000000000000000000000000000000000000000000008335168284610227826004818461370d565b909250905060007fffffffff0000000000000000000000000000000000000000000000000000000084167f6aba50180000000000000000000000000000000000000000000000000000000014806102bf57507fffffffff0000000000000000000000000000000000000000000000000000000084167fb957d0cb00000000000000000000000000000000000000000000000000000000145b8061030b57507fffffffff0000000000000000000000000000000000000000000000000000000084167febb4a55f00000000000000000000000000000000000000000000000000000000145b8061035757507fffffffff0000000000000000000000000000000000000000000000000000000084167f1ecdfb8c00000000000000000000000000000000000000000000000000000000145b806103a357507fffffffff0000000000000000000000000000000000000000000000000000000084167f7f2a5cca00000000000000000000000000000000000000000000000000000000145b806103ef57507fffffffff0000000000000000000000000000000000000000000000000000000084167f8e7d1e4300000000000000000000000000000000000000000000000000000000145b8061043b57507fffffffff0000000000000000000000000000000000000000000000000000000084167ff460590b00000000000000000000000000000000000000000000000000000000145b8061048757507fffffffff0000000000000000000000000000000000000000000000000000000084167f69ec1daa00000000000000000000000000000000000000000000000000000000145b806104d357507fffffffff0000000000000000000000000000000000000000000000000000000084167f582d424100000000000000000000000000000000000000000000000000000000145b8061051f57507fffffffff0000000000000000000000000000000000000000000000000000000084167f9891976500000000000000000000000000000000000000000000000000000000145b8061056b57507fffffffff0000000000000000000000000000000000000000000000000000000084167f2e778efc00000000000000000000000000000000000000000000000000000000145b806105b757507fffffffff0000000000000000000000000000000000000000000000000000000084167fe6fd04ff00000000000000000000000000000000000000000000000000000000145b8061060357507fffffffff0000000000000000000000000000000000000000000000000000000084167fa9236bc400000000000000000000000000000000000000000000000000000000145b8061064e57507fffffffff0000000000000000000000000000000000000000000000000000000084167e378a3a00000000000000000000000000000000000000000000000000000000145b8061069a57507fffffffff0000000000000000000000000000000000000000000000000000000084167f6233719600000000000000000000000000000000000000000000000000000000145b806106e657507fffffffff0000000000000000000000000000000000000000000000000000000084167f82daf2a100000000000000000000000000000000000000000000000000000000145b8061073257507fffffffff0000000000000000000000000000000000000000000000000000000084167fd59ff1fc00000000000000000000000000000000000000000000000000000000145b8061077e57507fffffffff0000000000000000000000000000000000000000000000000000000084167f94cf795e00000000000000000000000000000000000000000000000000000000145b806107ca57507fffffffff0000000000000000000000000000000000000000000000000000000084167ffde6e55400000000000000000000000000000000000000000000000000000000145b8061081657507fffffffff0000000000000000000000000000000000000000000000000000000084167f1055d70800000000000000000000000000000000000000000000000000000000145b905060007fffffffff0000000000000000000000000000000000000000000000000000000085167f6aba50180000000000000000000000000000000000000000000000000000000014806108ab57507fffffffff0000000000000000000000000000000000000000000000000000000085167fb957d0cb00000000000000000000000000000000000000000000000000000000145b806108f757507fffffffff0000000000000000000000000000000000000000000000000000000085167febb4a55f00000000000000000000000000000000000000000000000000000000145b8061094357507fffffffff0000000000000000000000000000000000000000000000000000000085167f1ecdfb8c00000000000000000000000000000000000000000000000000000000145b8061098f57507fffffffff0000000000000000000000000000000000000000000000000000000085167f7f2a5cca00000000000000000000000000000000000000000000000000000000145b806109db57507fffffffff0000000000000000000000000000000000000000000000000000000085167f8e7d1e4300000000000000000000000000000000000000000000000000000000145b80610a2757507fffffffff0000000000000000000000000000000000000000000000000000000085167f69ec1daa00000000000000000000000000000000000000000000000000000000145b90508115610c17578015610a4257610a3d611110565b610b19565b7f0b9fa6f5000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000861601610b19576000610a9b6020600c868861370d565b610aa491613737565b60601c90503381141580610b0a57503373ffffffffffffffffffffffffffffffffffffffff8216148015610b0a5750610adb6111a7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600891909101602052604090205460ff16155b15610b1757610b17611110565b505b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16600036604051610b6492919061377f565b600060405180830381855af49150503d8060008114610b9f576040519150601f19603f3d011682016040523d82523d6000602084013e610ba4565b606091505b509150915081610bb657805181602001fd5b7f676e689b000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000881601610c0957610c0986866111db565b9650610de695505050505050565b7fe3f34ec7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000861601610d3457600080610c6f858701876137b1565b91509150600080600080610cec868660008181526006602090815260408083205473ffffffffffffffffffffffffffffffffffffffff9095168352600782528083205460088352818420948452939091529020549092909167ffffffffffffffff7001000000000000000000000000000000008204811692911690565b6040805160208101959095528481019390935260608401919091526080808401919091528151808403909101815260a090920190529b50610de69a5050505050505050505050565b7f0b226d32000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000861601610d8b5763f4dd92ce6000526020601cf35b6040517f67fe1ffb0000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000861660048201526024015b60405180910390fd5b915050805190602001f35b610e19610dff3660046137b1565b600060208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b610e3f610e3a36600461380b565b611346565b6040519015158152602001610e23565b610e62610e5d366004613828565b611434565b005b610e6c6114a7565b604051610e2391906138d6565b610e62610e873660046138e9565b611539565b610e62610e9a366004613906565b611588565b610e6c610ead366004613906565b611606565b610e6261169a565b610ecd610ec836600461391f565b611700565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610e23565b610e62610f073660046139c8565b6117f9565b610e62610f1a36600461391f565b611830565b610f346daaeb6d7670e522a718067333cd4e81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610e23565b610f6c610f67366004613a87565b6118f4565b604051610e239190613b2e565b610e62610f87366004613b41565b611a6b565b610e6c611ad7565b610e62611ae6565b610e62611af8565b610e19610fb2366004613906565b60009081526006602052604090205467ffffffffffffffff1690565b60045473ffffffffffffffffffffffffffffffffffffffff16610f34565b610e62610ffa366004613b41565b611bb2565b610e6c611bf9565b610e19611015366004613906565b600090815260066020526040902054700100000000000000000000000000000000900467ffffffffffffffff1690565b610e62611053366004613b91565b611c08565b610e6261106636600461391f565b611c21565b610e19611079366004613906565b60009081526006602052604090205468010000000000000000900467ffffffffffffffff1690565b600d54610e19565b610e6c611caa565b610e3f6110bf366004613bbf565b611cb9565b610e626110d2366004613bed565b611d7a565b610e626110e53660046138e9565b611db8565b610e626110f8366004613c69565b611e86565b610e6261110b366004613c9e565b611f7c565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480159061116e575060045473ffffffffffffffffffffffffffffffffffffffff163314155b156111a5576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000806111d560017fa1f93c45d55294e6c2e764d95774fe71c86ec26daf62930bcecf3675030e7d9b613d50565b92915050565b600080806111eb84860186613ed9565b60368101519396509194509092505060601c806112055750825b825160008167ffffffffffffffff81111561122257611222613d63565b60405190808252806020026020018201604052801561124b578160200160208202803683370190505b50905060008267ffffffffffffffff81111561126957611269613d63565b604051908082528060200260200182016040528015611292578160200160208202803683370190505b50905060005b8381101561131f578681815181106112b2576112b2613fe8565b6020026020010151604001518382815181106112d0576112d0613fe8565b6020026020010181815250508681815181106112ee576112ee613fe8565b60200260200101516060015182828151811061130c5761130c613fe8565b6020908102919091010152600101611298565b5061133b84838360405180602001604052806000815250612144565b505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3a3ec3a80000000000000000000000000000000000000000000000000000000014806113d957507fffffffff0000000000000000000000000000000000000000000000000000000082167f1be900b100000000000000000000000000000000000000000000000000000000145b8061142557507f2e778efc000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806111d557506111d5826121aa565b61143c611110565b611446828261225b565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526bffffffffffffffffffffffff831660208201527ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d91015b60405180910390a15050565b6060600980546114b690614017565b80601f01602080910402602001604051908101604052809291908181526020018280546114e290614017565b801561152f5780601f106115045761010080835404028352916020019161152f565b820191906000526020600020905b81548152906001019060200180831161151257829003601f168201915b5050505050905090565b6115416123d4565b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611590611110565b600d5480156115cb576040517f2858c21800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d82905560408051828152602081018490527f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c910161149b565b6060600b805461161590614017565b80601f016020809104026020016040519081016040528092919081815260200182805461164190614017565b801561168e5780601f106116635761010080835404028352916020019161168e565b820191906000526020600020905b81548152906001019060200180831161167157829003601f168201915b50505050509050919050565b6116a26123d4565b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1565b600082815260036020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169282019290925282916117bb57506040805180820190915260025473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b6020810151600090612710906117df906bffffffffffffffffffffffff168761406a565b6117e99190614081565b91519350909150505b9250929050565b8773ffffffffffffffffffffffffffffffffffffffff811633146118205761182033612425565b61133b898989898989898961252a565b611838611110565b67ffffffffffffffff81111561187d576040517fb43e913700000000000000000000000000000000000000000000000000000000815260048101829052602401610ddd565b60008281526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff851617905581518481529081018390527f44ecfc706d63e347851cfd40acfa6cf2e3a41faa3e8b460210c03938e84a91ad910161149b565b606083821461195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610ddd565b8367ffffffffffffffff81111561197857611978613d63565b6040519080825280602002602001820160405280156119a1578160200160208202803683370190505b50905060005b84811015611a62576000808787848181106119c4576119c4613fe8565b90506020020160208101906119d991906138e9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110611a2757611a27613fe8565b90506020020135815260200190815260200160002054828281518110611a4f57611a4f613fe8565b60209081029190910101526001016119a7565b50949350505050565b611a73611110565b600b611a80828483614102565b5060408051600081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208201527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910161149b565b6060600b80546114b690614017565b611aee6123d4565b6111a560006128f0565b60055473ffffffffffffffffffffffffffffffffffffffff16338114611b4a576040517fd6eb09ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1611baf816128f0565b50565b611bba611110565b600c611bc7828483614102565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac37378828260405161149b929190614265565b6060600a80546114b690614017565b81611c1281612425565b611c1c8383612967565b505050565b611c29611110565b808203611c7457817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b611c5b84611606565b604051611c6891906138d6565b60405180910390a25050565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910161149b565b6060600c80546114b690614017565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611d2f5750600e5473ffffffffffffffffffffffffffffffffffffffff8381169116145b15611d3c575060016111d5565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602090815260408083209386168352929052205460ff165b9392505050565b8573ffffffffffffffffffffffffffffffffffffffff81163314611da157611da133612425565b611daf8787878787876129fe565b50505050505050565b611dc06123d4565b73ffffffffffffffffffffffffffffffffffffffff8116611e0d576040517f7448fbae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff841614801590611eb35750611eb18333611cb9565b155b15611eea576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152902054811115611f71576040517ff6deaa0400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ddd565b611c1c838383612ac6565b3373ffffffffffffffffffffffffffffffffffffffff861614801590611fa95750611fa78533611cb9565b155b15611fe0576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260005b818110156120cd5773ffffffffffffffffffffffffffffffffffffffff871660009081526020819052604081209087878481811061202457612024613fe8565b9050602002013581526020019081526020016000205484848381811061204c5761204c613fe8565b9050602002013511156120c5578686868381811061206c5761206c613fe8565b6040517ff6deaa0400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941660048501526020029190910135602483015250604401610ddd565b600101611fe4565b5061213c8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808a02828101820190935289825290935089925088918291850190849080828437600092019190915250612b2792505050565b505050505050565b825160005b818110156121965761218e8686838151811061216757612167613fe8565b602002602001015186848151811061218157612181613fe8565b6020026020010151612be2565b600101612149565b506121a385858585612d8f565b5050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f029a992c00000000000000000000000000000000000000000000000000000000148061223d57507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061224c575061224c82613089565b806111d557506111d582613120565b6127106bffffffffffffffffffffffff821611156122fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610ddd565b73ffffffffffffffffffffffffffffffffffffffff8216612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610ddd565b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600255565b60045473ffffffffffffffffffffffffffffffffffffffff1633146111a5576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6daaeb6d7670e522a718067333cd4e3b15611baf576040517fc617113400000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156124b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124dc9190614281565b611baf576040517fede71dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610ddd565b848314612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610ddd565b3373ffffffffffffffffffffffffffffffffffffffff891614806125bc57506125bc8833611cb9565b612622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610ddd565b60008060005b878110156126f75788888281811061264257612642613fe8565b90506020020135925086868281811061265d5761265d613fe8565b73ffffffffffffffffffffffffffffffffffffffff8e16600090815260208181526040808320898452825282208054939091029490940135955085939250906126a7908490613d50565b909155505073ffffffffffffffffffffffffffffffffffffffff8a16600090815260208181526040808320868452909152812080548492906126ea90849061429e565b9091555050600101612628565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b60405161277294939291906142fc565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff89163b15612864576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff8b169063bc197c81906127f99033908f908e908e908e908e908e908e9060040161432e565b6020604051808303816000875af1158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c919061439f565b7fffffffff00000000000000000000000000000000000000000000000000000000161461287e565b73ffffffffffffffffffffffffffffffffffffffff891615155b6128e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610ddd565b50505050505050505050565b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b3073ffffffffffffffffffffffffffffffffffffffff871603612ab8573373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801590612a7a5750612a646111a7565b336000908152602091909152604090205460ff16155b15612ab3576040517f98d94de6000000000000000000000000000000000000000000000000000000008152336004820152602401610ddd565b61213c565b61213c868686868686613201565b6000828152600660205260409020805467ffffffffffffffff680100000000000000008083048216859003909116027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909116179055611c1c8383836134d4565b815160005b81811015612bd057612bc8848281518110612b4957612b49613fe8565b6020026020010151848381518110612b6357612b63613fe8565b6020026020010151600091825260066020526040909120805467ffffffffffffffff68010000000000000000808304821694909403169092027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055565b600101612b2c565b50612bdc848484613572565b50505050565b6000828152600660205260409020805467ffffffffffffffff80821691612c1f91859170010000000000000000000000000000000090041661429e565b1115612c97578054612c50908390700100000000000000000000000000000000900467ffffffffffffffff1661429e565b81546040517f60a2a42c000000000000000000000000000000000000000000000000000000008152600481019290925267ffffffffffffffff166024820152604401610ddd565b805470010000000000000000000000000000000067ffffffffffffffff68010000000000000000808404821686018216027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff84168117839004821686019091169091027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff9091167fffffffffffffffff00000000000000000000000000000000ffffffffffffffff9092169190911717905573ffffffffffffffffffffffffffffffffffffffff9092166000908152600760209081526040808320805486019055600882528083209383529290522080549091019055565b825182518114612dfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610ddd565b60005b81811015612ea457838181518110612e1857612e18613fe8565b60200260200101516000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878481518110612e7257612e72613fe8565b602002602001015181526020019081526020016000206000828254612e97919061429e565b9091555050600101612dfe565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612f1c9291906143bc565b60405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15613009576040517fbc197c81000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063bc197c8190612f9e9033906000908a908a908a906004016143ea565b6020604051808303816000875af1158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe1919061439f565b7fffffffff000000000000000000000000000000000000000000000000000000001614613023565b73ffffffffffffffffffffffffffffffffffffffff851615155b6121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610ddd565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806111d557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146111d5565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806131b357507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806111d55750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b3373ffffffffffffffffffffffffffffffffffffffff8716148061322a575061322a8633611cb9565b613290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a45440000000000000000000000000000000000006044820152606401610ddd565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208181526040808320878452909152812080548592906132ce908490613d50565b909155505073ffffffffffffffffffffffffffffffffffffffff85166000908152602081815260408083208784529091528120805485929061331190849061429e565b9091555050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff808816929089169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a473ffffffffffffffffffffffffffffffffffffffff85163b15613454576040517ff23a6e61000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e61906133e99033908b908a908a908a908a90600401614455565b6020604051808303816000875af1158015613408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342c919061439f565b7fffffffff00000000000000000000000000000000000000000000000000000000161461346e565b73ffffffffffffffffffffffffffffffffffffffff851615155b61213c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e54000000000000000000000000000000006044820152606401610ddd565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613512908490613d50565b9091555050604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b8151815181146135de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d4154434800000000000000000000000000000000006044820152606401610ddd565b60005b81811015613687578281815181106135fb576135fb613fe8565b60200260200101516000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086848151811061365557613655613fe8565b60200260200101518152602001908152602001600020600082825461367a9190613d50565b90915550506001016135e1565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516136ff9291906143bc565b60405180910390a450505050565b6000808585111561371d57600080fd5b8386111561372a57600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156137775780818660140360031b1b83161692505b505092915050565b8183823760009101908152919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611baf57600080fd5b600080604083850312156137c457600080fd5b82356137cf8161378f565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611baf57600080fd5b60006020828403121561381d57600080fd5b8135611d73816137dd565b6000806040838503121561383b57600080fd5b82356138468161378f565b915060208301356bffffffffffffffffffffffff8116811461386757600080fd5b809150509250929050565b6000815180845260005b818110156138985760208185018101518683018201520161387c565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611d736020830184613872565b6000602082840312156138fb57600080fd5b8135611d738161378f565b60006020828403121561391857600080fd5b5035919050565b6000806040838503121561393257600080fd5b50508035926020909101359150565b60008083601f84011261395357600080fd5b50813567ffffffffffffffff81111561396b57600080fd5b6020830191508360208260051b85010111156117f257600080fd5b60008083601f84011261399857600080fd5b50813567ffffffffffffffff8111156139b057600080fd5b6020830191508360208285010111156117f257600080fd5b60008060008060008060008060a0898b0312156139e457600080fd5b88356139ef8161378f565b975060208901356139ff8161378f565b9650604089013567ffffffffffffffff80821115613a1c57600080fd5b613a288c838d01613941565b909850965060608b0135915080821115613a4157600080fd5b613a4d8c838d01613941565b909650945060808b0135915080821115613a6657600080fd5b50613a738b828c01613986565b999c989b5096995094979396929594505050565b60008060008060408587031215613a9d57600080fd5b843567ffffffffffffffff80821115613ab557600080fd5b613ac188838901613941565b90965094506020870135915080821115613ada57600080fd5b50613ae787828801613941565b95989497509550505050565b600081518084526020808501945080840160005b83811015613b2357815187529582019590820190600101613b07565b509495945050505050565b602081526000611d736020830184613af3565b60008060208385031215613b5457600080fd5b823567ffffffffffffffff811115613b6b57600080fd5b613b7785828601613986565b90969095509350505050565b8015158114611baf57600080fd5b60008060408385031215613ba457600080fd5b8235613baf8161378f565b9150602083013561386781613b83565b60008060408385031215613bd257600080fd5b8235613bdd8161378f565b915060208301356138678161378f565b60008060008060008060a08789031215613c0657600080fd5b8635613c118161378f565b95506020870135613c218161378f565b94506040870135935060608701359250608087013567ffffffffffffffff811115613c4b57600080fd5b613c5789828a01613986565b979a9699509497509295939492505050565b600080600060608486031215613c7e57600080fd5b8335613c898161378f565b95602085013595506040909401359392505050565b600080600080600060608688031215613cb657600080fd5b8535613cc18161378f565b9450602086013567ffffffffffffffff80821115613cde57600080fd5b613cea89838a01613941565b90965094506040880135915080821115613d0357600080fd5b50613d1088828901613941565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156111d5576111d5613d21565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613db557613db5613d63565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e0257613e02613d63565b604052919050565b600082601f830112613e1b57600080fd5b8135602067ffffffffffffffff821115613e3757613e37613d63565b613e45818360051b01613dbb565b82815260079290921b84018101918181019086841115613e6457600080fd5b8286015b84811015613ece5760808189031215613e815760008081fd5b613e89613d92565b813560068110613e995760008081fd5b815281850135613ea88161378f565b818601526040828101359082015260608083013590820152835291830191608001613e68565b509695505050505050565b60008060008060808587031215613eef57600080fd5b8435613efa8161378f565b935060208581013567ffffffffffffffff80821115613f1857600080fd5b613f2489838a01613e0a565b95506040880135915080821115613f3a57600080fd5b613f4689838a01613e0a565b94506060880135915080821115613f5c57600080fd5b818801915088601f830112613f7057600080fd5b813581811115613f8257613f82613d63565b613fb2847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613dbb565b91508082528984828501011115613fc857600080fd5b808484018584013760008482840101525080935050505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061402b57607f821691505b602082108103614064577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80820281158282048414176111d5576111d5613d21565b6000826140b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b601f821115611c1c57600081815260208120601f850160051c810160208610156140e35750805b601f850160051c820191505b8181101561213c578281556001016140ef565b67ffffffffffffffff83111561411a5761411a613d63565b61412e836141288354614017565b836140bc565b6000601f841160018114614180576000851561414a5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556121a3565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156141cf57868501358255602094850194600190920191016141af565b508682101561420a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60208152600061427960208301848661421c565b949350505050565b60006020828403121561429357600080fd5b8151611d7381613b83565b808201808211156111d5576111d5613d21565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156142e357600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006143106040830186886142b1565b82810360208401526143238185876142b1565b979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a0604083015261436860a08301888a6142b1565b828103606084015261437b8187896142b1565b9050828103608084015261439081858761421c565b9b9a5050505050505050505050565b6000602082840312156143b157600080fd5b8151611d73816137dd565b6040815260006143cf6040830185613af3565b82810360208401526143e18185613af3565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261442360a0830186613af3565b82810360608401526144358186613af3565b905082810360808401526144498185613872565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261444960a08301848661421c56fea164736f6c6343000813000a00000000000000000000000000cda53500210086ea24006a70009400b81d84370000000000000000000000001e0049783f008a0085193e00003d00cd54003c7100000000000000000000000000000000000000adc04c56bf30ac9d3c0aaf14dc00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4775747465724d656c6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005474d454c4f000000000000000000000000000000000000000000000000000000